package javase.CollectionAndMap.generic;

/**
 *
 * 泛型类
 * 1.[访问权限修饰符] class 类名<任意大写字母>{ //类体 }
 * 2.<K,T,V>  允许写多个，代表未来使用时的任意引用数据类型
 * 3.泛型类，可以被当作属性类型使用，可以被当作方法的形参类型使用，也可以当作方法的返回值类型使用
 * 4.实际使用时，需要给定引用数据类型
 * 5.泛型不可以用在静态方法中
 *
 * 泛型方法
 * 1.[访问权限修饰符] <任意大写字母> void/返回值的数据类型 方法名(任意大写字母  形参名){  //方法体 }
 * 2.<K,T,V>  允许写多个，代表未来使用时的任意引用数据类型
 * 例如：public <B,C> void testGen1(B b ,C c)
 * 3.静态方法，声明时也可以使用泛型
 * 例如：public static <B,C> void testGen4(B b ,C c)
 * 4.实际使用时，需要给定引用数据类型
 */
public class GenericDemo2<K,T,V> {

    private K name;
    private T age;
    private V gender;

    public GenericDemo2(K name, T age, V gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }

    public void testGen2(K s){
        System.out.println(name+ " say "+s);
    }

    public T testGen3(){
        System.out.println("testGen3()");
        return null;
    }


    public <B,C> void testGen1(B b ,C c){
        System.out.println("testGen1() = "+ b + c);
    }

    public static <B,A> void testGen4(B b ,A a){
        System.out.println("testGen4() = "+b + a);
    }

    public static void main(String[] args) {
        GenericDemo2<String,Integer,Character> d1 = new GenericDemo2<>("李四" , 18 , '女');
        d1.testGen2("hello");

        //调用方法
        d1.testGen1("abc" , 10);
        GenericDemo2.testGen4(false , "aaa");
    }

}
